import axios from 'axios'
import errorHandle from './errorHandle'

class HttpRequest {
  constructor (baseUrl) {
    this.baseUrl = baseUrl
  }

  // 获取axios配置
  getAxiosConfig () {
    const config = {
      baseURL: this.baseUrl,
      headers: {
        'Content-Type': 'application/json;charset=utf-8'
      },
      timeout: 10000
      // withCredentials为true 每次浏览器的请求都会吧cookie带上（重要）
      // withCredentials: true
    }
    return config
  }

  // 设置拦截器
  setInterceptors (instance) {
    // 请求拦截器
    instance.interceptors.request.use((config) => {
      return config
    }, (err) => {
      return Promise.reject(err)
    })

    // 响应拦截器
    instance.interceptors.response.use((res) => {
      if (res.status === 200) {
        return Promise.resolve(res.data)
      } else {
        errorHandle(res)
        return Promise.reject(res)
      }
    }, (err) => {
      errorHandle(err)
      return Promise.reject(err)
    })
  }

  // 创建实例
  request (options) {
    const instance = axios.create()
    const newOptions = Object.assign(this.getAxiosConfig(), options)
    this.setInterceptors(instance)
    return instance(newOptions)
  }

  get (url, config = {}) {
    const options = Object.assign(config, {
      url,
      method: 'get'
    })
    return this.request(options)
  }

  post (url, data) {
    return this.request({
      url,
      method: 'post',
      data: data
    })
  }
}

// const instance = axios.create({
//   baseURL: process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.prod,
//   headers: {
//     'Content-Type': 'application/json;charset=utf-8'
//   },
//   timeout: 10000,
//   // withCredentials为true 每次浏览器的请求都会吧cookie带上（重要）
//   withCredentials: true
// })

// // 请求拦截器
// instance.interceptors.request.use((config) => {
//   return config
// }, (err) => {
//   return Promise.reject(err)
// })

// // 响应拦截器
// instance.interceptors.response.use((res) => {
//   // return new Promise((resolve, reject) => {
//   if (res.status === 200) {
//     return Promise.resolve(res.data)
//   } else {
//     errorHandle(res)
//     return Promise.reject(res)
//   }
//   // })
// }, (err) => {
//   errorHandle(err)
//   return Promise.reject(err)
// })

export default HttpRequest
